/*
 * SEGUNDA ENTREGA DEL PROYECTO DE BASES DE DATOS "BIBLIOTECA DIGITAL"
 * 
 * Integrantes:
 * Gamboa Edwin Ricardo Cód: 0926631 plan: 2711
 * Portilla Cortes Maria Cristina Cód: 0844113 plan: 3743 
 * Rosero Rosero Luis Alberto Cód: 0943740 plan:3743
 * 
 */
package accesoDatos;
import java.sql.*;
import logica.*;
import java.util.*;

/**
 *
 * @author Gamboa Family
 */
public class DaoAutor {
    
    FachadaBD fachada;

    public DaoAutor(){
        fachada= new FachadaBD();
    }

    public void guardarAutor(Autor aut){
        String sql_guardar;
        sql_guardar="INSERT INTO autor(codigo_autor, nombres_autor, apellidos_autor, "
                + "estado_autor) "
                + "VALUES ('" +
                aut.getCodigo() + "', '" + aut.getNombres() + "', '" +
                aut.getApellidos() + "', '" + aut.getEstado() + "')";
        ejecutarUpdate(sql_guardar);
                
    }//fin guardar
    
    public int ejecutarUpdate(String insert){
        try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(insert);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return -1;
    }

    public Vector consultarAutorPorNombre(String nombre){
        Vector v = new Vector();        
        String sql_select;
        sql_select="SELECT codigo_autor, nombres_autor, apellidos_autor "
                + "FROM autor WHERE nombres_autor like '%" + nombre + "%' "
                + "OR apellidos_autor like '%" + nombre + "%'";
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            //
            while(tabla.next()){
               Vector v2 = new Vector();
               v2.add(tabla.getString(1));
               v2.add(tabla.getString(2));
               v2.add(tabla.getString(3));
               v.add(v2);
            }            
            conn.close();            
            System.out.println("Conexion cerrada");
            return v;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return null;
    }
    
    public Vector consultarAutorPorCodigo(String codigo){
        Vector v = new Vector();
        String sql_select;
        sql_select="SELECT codigo_autor, nombres_autor, apellidos_autor "
                + "FROM autor WHERE codigo_autor = '" + codigo +"'";
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            while(tabla.next()){
               Vector v2 = new Vector();
               v2.add(tabla.getString(1));
               v2.add(tabla.getString(2));
               v2.add(tabla.getString(3));
               v.add(v2);
            }            
            conn.close();            
            System.out.println("Conexion cerrada");
            return v;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return null;
    }
    
    public Vector consultarTodosLosAutores(){
        Vector v = new Vector();
        String sql_select;
        sql_select="SELECT codigo_autor, nombres_autor, apellidos_autor "
                + "FROM autor";
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            while(tabla.next()){
               Vector v2 = new Vector();
               v2.add(tabla.getString(1));
               v2.add(tabla.getString(2));
               v2.add(tabla.getString(3));
               v.add(v2);
            }            
            conn.close();            
            System.out.println("Conexion cerrada");
            return v;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return null;
    }
        
    public Autor retornarAutorPorCodigo(String codigo){
        Autor a = new Autor();
        String sql_select;
        sql_select="SELECT codigo_autor, nombres_autor, apellidos_autor "
                + "FROM autor WHERE codigo_autor = '" + codigo +"'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                a.setCodigo(tabla.getString(1));
                a.setNombres(tabla.getString(2));
                a.setApellidos(tabla.getString(3)); 
                System.out.println("Autor Ok");
                }
            conn.close();
            return a;
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return null;
    }
    
    public void modificarAutor (int caso, String cod_aut, String valor){
        String actualizacion;
        switch(caso){
            case 1:
                actualizacion = "UPDATE autor SET nombres_autor = \'" + valor + "\' "
                + "WHERE codigo_autor = \'"+ cod_aut + "\'";
                ejecutarUpdate(actualizacion);
                System.out.println(actualizacion);
                break;
            case 2:
                actualizacion = "UPDATE autor SET apellidos_autor = \'" + valor + "\' "
        + "WHERE codigo_autor = \'"+ cod_aut + "\'";
                ejecutarUpdate(actualizacion);
                System.out.println(actualizacion);
                break;
        }
    }
    
    public boolean existeCodigo(String codigo){
        String sql_select, aux="";
        sql_select="SELECT codigo_autor FROM autor "
                + "WHERE codigo_autor =\'" + codigo+ "\'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                aux=tabla.getString(1);
                System.out.println(aux);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        if(aux.equals(codigo))
            return true;
        else 
            return false;
    }
    
    public void desactivarAutor (String cod_aut){
        String actualizacion;
        
        actualizacion = "UPDATE autor SET estado_autor = '1' "
                + "WHERE codigo_autor = \'"+ cod_aut + "\'";
        ejecutarUpdate(actualizacion);
        System.out.println(actualizacion);
    }
    
    public void activarAutor (String cod_aut){
        String actualizacion;
        
        actualizacion = "UPDATE autor SET estado_autor = '0' "
                + "WHERE codigo_autor = \'"+ cod_aut + "\'";
        ejecutarUpdate(actualizacion);
        System.out.println(actualizacion);
    }
    
    public Vector listarAutores(){
        Vector v = new Vector();
        Autor a = new Autor();
        String sql_select;
        sql_select="SELECT codigo_autor FROM autor ";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                a = retornarAutorPorCodigo(tabla.getString(1));
                v.add(a);                               
                }
            conn.close();
            System.out.println("Listado Autores Ok");
            return v;
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return null;        
    } 
    
     public boolean esActivado(String cod_autor){
        String sql_select, estado="";
        boolean respuesta = true;
        sql_select="SELECT estado_autor FROM autor "
                + "WHERE codigo_autor = '" + cod_autor + "'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                estado = tabla.getString(1);           
            }
            if(estado.equals("1"))
                respuesta = false;
            
            conn.close();
            System.out.println("Consulta de si esta Activado Autor Ok");           
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return respuesta; 
    }
    
}// Fin Clase

